home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / sndadder / snd.c < prev    next >
Text File  |  1993-07-08  |  2KB  |  111 lines

  1. /* SNDファイルくっつけちゃうよバカ野郎 *
  2.  * Copyright 1993 by Tetsuo O.            *
  3.  *                                        */
  4.  
  5. #pragma On(Align_labels) ;
  6. #pragma On(486) ;
  7.  
  8. /*           サイリックス
  9. へっへーっ、Cx486DLCに付け替えっちゃたもんねーっ。
  10.        2Fなんだもんねー。HRとほぼ同等なんだもんねーっ。    */
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15.  
  16. #define    BUFFERSIZE    131072
  17. int ext_malloc() ;
  18.  
  19. struct HEADDER {
  20.     char name[8] ;
  21.     unsigned int id ;
  22.     unsigned int width ;
  23.     unsigned int loop_start ;
  24.     unsigned int loop_length ;
  25.     unsigned short freq ;
  26.     unsigned short fix ;
  27.     unsigned char onkai ;
  28.     unsigned char flug ;
  29.     unsigned short dummy ;
  30. } ;
  31.  
  32. int snd_adder(p,s1,s2,s3)
  33. int *p ;
  34. char *s1,*s2,*s3 ;
  35. {
  36.     unsigned int i,j ;
  37.     struct HEADDER snd1 ;
  38.     struct HEADDER snd2 ;
  39.     struct HEADDER snd3 ;
  40.     FILE *fp1,*fp2,*out ;
  41.     char *buffer ;
  42.     char name1[80],name2[80],name3[80] ;
  43.  
  44.     strcpy(name1,s1) ;    strcat(name1,".snd") ;
  45.     strcpy(name2,s2) ;    strcat(name2,".snd") ;
  46.     strcpy(name3,s3) ;    strcat(name3,".snd") ;
  47.  
  48.     i = *p = ext_malloc(buffer) ;
  49.  
  50.     if ((fp1 = fopen(name1,"rb")) == NULL) {
  51.         free(buffer) ;
  52.         return 1 ;
  53.     }
  54.     if ((fp2 = fopen(name2,"rb")) == NULL) {
  55.         free(buffer) ;
  56.         return 1 ;
  57.     }
  58.  
  59.     fread(&snd1,1,32,fp1) ;    fread(&snd2,1,32,fp2) ;
  60.     if ((snd3.freq = snd1.freq) != snd2.freq) {
  61.         fclose(fp1) ;    fclose(fp2) ;        free(buffer) ;
  62.         return 3 ;
  63.     }
  64.     for (j=0; j<8; j++)
  65.         snd3.name[j] = snd1.name[j] ;
  66.     snd3.id = snd1.id ;
  67.     snd3.fix = snd1.fix ;
  68.     snd3.onkai = snd1.onkai ;
  69.     snd3.width = snd1.width + snd2.width ;
  70.     snd3.flug = snd3.dummy = snd3.loop_start = snd3.loop_length = 0 ;
  71.  
  72.     if ((out = fopen(name3,"wb")) == NULL) {
  73.         fclose(fp1) ;    fclose(fp2) ;    free(buffer) ;
  74.         return 4 ;
  75.     }
  76.     fwrite(&snd3,1,32,out) ;
  77.     j = fread(buffer,sizeof(char),i,fp1) ;
  78.     while(j > 0) {
  79.         if (fwrite(buffer,1,j,out) < j) {
  80.             fclose(fp1) ;    fclose(fp2) ;    fclose(out) ;
  81.             free(buffer) ;
  82.             return 2 ;
  83.         }
  84.         j = fread(buffer,sizeof(char),i,fp1) ;
  85.     }
  86.     j = fread(buffer,sizeof(char),i,fp2) ;
  87.     while(j > 0) {
  88.         if (fwrite(buffer,1,j,out) < j) {
  89.             fclose(fp1) ;    fclose(fp2) ;    fclose(out) ;
  90.             free(buffer) ;
  91.             return 2 ;
  92.         }
  93.         j = fread(buffer,sizeof(char),i,fp2) ;
  94.     }
  95.     fclose(fp1) ;    fclose(fp2) ;    fclose(out) ;
  96.     free(buffer) ;
  97. }
  98.  
  99. int ext_malloc(buf)
  100. char *buf ;
  101. {
  102.     int i ;
  103.  
  104.     i = 0 ;
  105.     while((buf = malloc(i+BUFFERSIZE)) != NULL) {
  106.         free(buf) ;
  107.         i += BUFFERSIZE ;
  108.     }
  109.     return i ;
  110. }
  111.